package wlcs.mybatisPlus.dto;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * <p>分页 Page 对象接口</p>
 *
 * <p>项目名称：辽宁移动2020年6月</p>
 *
 * <p>注释:无</p>
 *
 * <p>Copyright: Copyright Faker(c) 2023/1/17</p>
 *
 * <p>公司: Faker</p>
 *
 * @author 淡梦如烟
 * @version 1.0
 * @date 2023/1/17 11:08
 */
@Data
@NoArgsConstructor
public class Page<T> implements Serializable {

    /**
     * 设置每页显示条数
     */
    private long size = 10;

    /**
     * 设置当前页
     */
    private long current = 1;

    /**
     * 设置当前满足条件总行数
     */
    private long total = 0;

    /**
     * 排序字段信息
     */
    private List<OrderItem> orders = new ArrayList<OrderItem>();

    /**
     * 查询数据列表
     */
    private List<T> records = Collections.emptyList();


    /**
     * 分页记录列表
     *
     * @return 分页对象记录列表
     */
    public List<T> getRecords() {
        return this.records;
    }

    /**
     * 设置分页记录列表
     */
    public Page<T> setRecords(List<T> records) {
        this.records = records;
        return this;
    }

    /**
     * 当前满足条件总行数
     *
     * @return 总条数
     */
    public long getTotal() {
        return this.total;
    }

    /**
     * 设置当前满足条件总行数
     */
    public Page<T> setTotal(long total) {
        this.total = total;
        return this;
    }

    /**
     * 获取每页显示条数
     *
     * @return 每页显示条数
     */
    public long getSize() {
        return this.size;
    }

    /**
     * 设置每页显示条数
     */
    public Page<T> setSize(long size) {
        this.size = size;
        return this;
    }

    /**
     * 当前页，默认 1
     *
     * @return 当前页
     */
    public long getCurrent() {
        return this.current;
    }

    /**
     * 设置当前页
     */
    public Page<T> setCurrent(long current) {
        this.current = current;
        return this;
    }

    /**
     * 获取分页起始行数
     *
     * @return
     */
    public long getStartRow() {
        return size * (this.current - 1);
    }

    /**
     * 获取分页结束行数
     *
     * @return
     */
    public long getEndRow() {
        return size * this.current;
    }

    /**
     * 分页构造函数
     *
     * @param current 当前页
     * @param size    每页显示条数
     */
    public Page(long current, long size) {
        this(current, size, 0);
    }

    public Page(long current, long size, long total) {
        if (current > 1) {
            this.current = current;
        }
        this.size = size;
        this.total = total;
    }


}